// 子模块moduleA路径：store/modules/moduleA.js
export default {
  // 命名空间
  namespaced: true,
  state: {
    text: "购物车模块下的数据",
    // 如果没有数据 找真 第一个为假直接拿第二个数据
    list: uni.getStorageSync("hmyg-cart") || [],
  },
  getters: {
    totalNums(state) {
      let nums = 0;
      state.list.forEach((item) => (nums += item.num));
      return nums;
    },
    // 选中的商品数组
    checkedCarts(state) {
      return state.list.filter((item) => item.checked);
    },
    // 选中的商品总数
    checkedCartNums(state, getters) {
      return getters.checkedCarts.reduce((s, v) => s + v.num, 0);
    },
    // 选中的商品总价
    checkedCartPrice(state, getters) {
      return getters.checkedCarts.reduce(
        (s, v) => s + v.num * v.goods_price,
        0
      );
    },
    allCheck(state, getters) {
      return (
        state.list.length && state.list.length === getters.checkedCarts.length
      );
    },
  },
  mutations: {
    // 添加商品到购物车
    addCart(state, payload) {
      // payload =  goodsDetail

      // 判断商品是否存在 找到就返回数组下标 找不到就返回-1
      // v = list 中 每一个对象
      const index = state.list.findIndex(
        (item) => item.goods_id === payload.goods_id
      );
      if (index === -1) {
        // 没买过 新增
        state.list.push({ ...payload, num: 1, checked: true });
      } else {
        // 买过 加一件
        state.list[index].num++;
      }
      // 数据改变 同时存储到本地
      uni.setStorageSync("hmyg-cart", state.list);
    },
    // 商品选中与否的切换
    toggleGoodsCheck(state, payload) {
      // index = payload
      state.list[payload].checked = !state.list[payload].checked;
      // 数据改变 同时存储到本地
      uni.setStorageSync("hmyg-cart", state.list);
    },
    toggleAllCheck(state, payload) {
      const allCheck = !this.getters["cart/allCheck"];
      state.list.forEach((item) => (item.checked = allCheck));
      // 数据改变 同时存储到本地
      uni.setStorageSync("hmyg-cart", state.list);
    },
    numChange(state, payload) {
      state.list[payload.index].num += payload.num;
      // 数据改变 同时存储到本地
      uni.setStorageSync("hmyg-cart", state.list);
    },
    deleteGoods(state, payload) {
      state.list.splice(payload, 1);
    },
  },
  actions: {},
};
